package top100

// 分步骤实现 左边的累计相乘，可以得到每个位置左边的数的乘积
// 右边的累计相乘，可以得到每个位置右边的数的乘积
// 左右相乘，就是需要的值
func productExceptSelf(nums []int) []int {
	// 初始化结果为 全1数组
	output := make([]int, len(nums))
	for i := 0; i < len(output); i++ {
		output[i] = 1
	}

	// left right 分别表示左边，右边相乘计算的结果
	left, right := 1, 1
	for i, j := 0, len(nums)-1; i < len(nums) && j >= 0; i++ {
		output[i] *= left
		output[j] *= right
		// left ，right 增加
		left = left * nums[i]
		right = right * nums[j]
		j--
	}
	return output
}
